import pandas as pd
import datetime,os,sys

#判断授权有效时间
def 判断授权():
    # 定义开始日期和结束日期
    start_date = datetime.datetime(2024, 2, 5)
    end_date = datetime.datetime(2024, 2, 6)
    now = datetime.datetime.now()
    # 判断当前时间是否在指定日期之间
    if start_date <= now <= end_date:
        程序授权 = True
    else:
        程序授权 = False
    程序授权 = True
    return 程序授权
#获取本地的excel文件
def 获取文件信息():
    excel_file=""
    # 获取当前执行Python文件所在的目录路径
    current_dir = os.path.dirname(os.path.realpath(sys.argv[0]))
    # 获取当前目录下的所有文件和文件夹
    files = os.listdir(current_dir)
    # 遍历所有文件和文件夹，找到Excel文件
    for file in files:
        if  "生产计划"  in file and ("xls" in file or "xlsx" in file):
            # 获取Excel文件名
            excel_file = file
            break
    # 拼接Excel文件完整路径
    excel_path = os.path.join(current_dir, excel_file)
    # print("Excel文件路径：", excel_path)
    # print("Excel文件名：", excel_file)
    return excel_file,excel_path
文件名,文件路径=获取文件信息()
print(f"开始读取以下目录文件：{文件路径}")
数据库信息=pd.read_excel(文件路径,sheet_name="数据库")
生产计划信息=pd.read_excel(文件路径,sheet_name="生产计划")
生产计划信息 = 生产计划信息.dropna()
#处理日期格式
def 日期格式(para):
    if type(para)==int or type(para)==float:
        delta=pd.Timedelta(str(int(para))+"days")
        time=pd.to_datetime("1899-12-30")+delta
        return time
    else:
        return para
生产计划信息['日期'] =生产计划信息['日期'].apply(日期格式)

生产计划信息['日期'] = 生产计划信息['日期'].dt.strftime('%Y-%m-%d')

原材料使用计划信息=pd.read_excel(文件路径,sheet_name="原材料使用计划")
原材料=数据库信息.columns.tolist()[1:]
日期列表= 生产计划信息['日期'].unique().tolist()

生产计划信息["产品名称"]=""
生产计划信息['商品'] = 生产计划信息['商品'].fillna('')
# 新增原材料
for i in 原材料:
    生产计划信息[原材料] =0
#判断生产计划的商品是否存在
for i,j in 生产计划信息.iterrows():
    for index,value in 数据库信息["产品名称"].items():
        # print(j["商品"],value)
        if j["商品"] in value:
            生产计划信息.loc[i,"产品名称"]=value
            for 原材料名称 in 原材料:
                # print(原材料名称)
                # print(j["数量"])
                # print(数据库信息[数据库信息["产品名称"]==value][原材料])
                生产计划信息.loc[i,原材料名称]=j["数量"]*数据库信息[数据库信息["产品名称"]==value][原材料名称].iloc[-1]

        elif j["商品"]=="":
            生产计划信息.loc[i, "产品名称"] = ""

#判断是否存在空值，商品和产品名称不匹配
缺失商品=生产计划信息[生产计划信息['产品名称']==""]["商品"].tolist()
去重缺失商品=list(set(缺失商品))
null_count = len(去重缺失商品)
print(f"生产计划有{null_count}个商品在数据库找不到匹配，是否继续,如继续请输入y。\n"
      f"请在数据库增加以下商品信息或修改产品名称：")
for i in 去重缺失商品:
    print(f"在数据库缺失记录:{i}")
while input().lower() != 'y':
    continue
#生成汇总值
汇总字典={}
for i in 原材料:
    汇总字典[i]="sum"
生产计划信息 = 生产计划信息.replace(' ', 0)
生产计划信息 = 生产计划信息.fillna(0)


# 生产计划信息.to_excel(r"C:\Users\AXZQ\PycharmProject\数据分析\z.xlsx")
生产计划日期汇总 = 生产计划信息.groupby('日期').agg(汇总字典)
生产计划日期结果 = 生产计划日期汇总.transpose()
生产计划日期结果.columns = pd.to_datetime(生产计划日期结果.columns, format='%Y-%m-%d')
生产计划日期结果 = 生产计划日期结果.rename(columns=lambda x: pd.to_datetime(x, errors='ignore').strftime('%Y-%m-%d'))
生产计划日期结果精简 = 生产计划日期结果.drop(生产计划日期结果[生产计划日期结果.eq(0).all(1)].index)







if 判断授权():
    新文件路径=文件路径.replace(文件名,"原材料使用计划.xlsx")
    # 生产计划日期结果.to_excel(新文件路径, sheet_name="原材料使用计划_全")
    # 创建一个ExcelWriter对象
    writer = pd.ExcelWriter(新文件路径)

    # 将DataFrame保存到不同的工作表中
    生产计划日期结果.to_excel(writer, sheet_name='全部')
    生产计划日期结果精简.to_excel(writer, sheet_name='精简')

    writer.close()

    print("原材料计划已生成,结束输入y")
    while input().lower() != 'y':
        break
else:
    print("无软件授权，无法运行，请联系工作人员")
    while input().lower() != 'y':
        break

